package com.zggk.framework.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
 * 
 * 不使用
  * 描述： excel读写工具类
  * Excel 导入到mysql .
  * @author 王求卿[wangqiuqing] Tel18101037995
  * 日期： 2018年4月27日 上午11:09:28
 */
public class POIProcessUtils {
//
//        private static Logger logger  = Logger.getLogger(POIProcessUtils.class);
//        private final static String xls = "xls";
//        private final static String xlsx = "xlsx";
//        
//        
//        private static InputStream is = null;
//        /**
//         * 
//         * @Description 根据有效行数决定进度
//         * @author 尹强[yinqiang] Email:2259441906@qq.com Tel:18181725967
//         * @createDate 2018年5月7日 上午11:03:40
//         */
//        public static int calRow(int effectRow) {
//        	if(effectRow <100) { //有效行数<100
//        		effectRow = effectRow%10;
//        		//effectRow-=effectRow;
//        	}
//        	if(effectRow <1000) {
//        		effectRow = effectRow%100;
//        	}
//        	if(effectRow <10000) {//8000
//        		effectRow = effectRow%1000;
//        	}
//        	if(effectRow <100000) {
//        		effectRow = effectRow%10000;
//        	}
//        	if(effectRow <1000000) {
//        		effectRow = effectRow%100000;
//        	}
//			return effectRow;
//        	
//        }
//        
//        /**
//         * 读取excel文件后，把第一行中的值，用表头组成map集合
//         * 所有的行作为一个集合返回。我们可以在代码中循环这个集合.
//         * @param file isflag 表示是否包含表头文件,包含表头则赋值为true
//         * @throws IOException
//         */
//        public static List<Map<String,Object>> readExcel(String path) throws IOException{
//        	ResolveThreadUtils process = new ResolveThreadUtils(100);
//        	process.run();
//        	
//            //检查文件
//            checkFile(path);
//            //获得Workbook工作薄对象
//            Workbook workbook = getWorkBook(path);
//            //创建返回对象，把每行中的值作为一个数组，所有行作为一个集合返回
//            List<Map<String,Object>> list = Lists.newArrayList();
//            if(workbook != null){
//            	/**读取拥有几个sheet页**/
//            	Map<Integer,String> colAndNameMap =Maps.newHashMap();
//                for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
//                	
//                    //获得当前sheet工作表
//                    Sheet sheet = workbook.getSheetAt(sheetNum);
//                    if(sheet == null){
//                        continue;
//                    }
//                    //获得当前sheet的开始行
//                    int firstRowNum  = sheet.getFirstRowNum();
//                    //获得当前sheet的结束行
//                    int lastRowNum = sheet.getLastRowNum();
//                    //循环除了第一行的所有行
//                    for(int rowNum = firstRowNum;rowNum <= lastRowNum;rowNum++){
//                    	process.updateProgress(1);
//                        //获得当前行
//                        Row row = sheet.getRow(rowNum);
//                        if(row == null){
//                            continue;
//                        }
//                        int effectRow = lastRowNum-firstRowNum;//有效行数
//                        int increment = calRow(effectRow);//增量
//                        //判断行数
//                        if(rowNum == increment) { //10
//                        	process.updateProgress(rowNum);
//                        	increment++;//增加
//                        	if(increment==effectRow) { //当增量达到有效行数时不在增加
//                        		increment=effectRow;
//                        	}
//                        }
//                        //获得当前行的开始列
//                        int firstCellNum = row.getFirstCellNum();
//                        //获得当前行的列数
//                        int lastCellNum = row.getPhysicalNumberOfCells();
//                      //  String[] cells = new String[row.getPhysicalNumberOfCells()];
//                        Map<String,Object> cellMap = Maps.newHashMap();
//                        //循环当前行
//                        for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
//                        	Cell cell = row.getCell(cellNum);//获取cell的名称
//                        	Object cellValue =  getCellValue(cell);//获取对应的值  修改成所有的excel数据都解析成string类型。由于excel的数据难标准化处理。            
//                        	//Object cellValue = cell.getRichStringCellValue().getString();       
//                        	//标准的解析，从第一行开始，读取表头文件
//                        	if(rowNum == 0) {
//                        		colAndNameMap.put(cellNum, cellValue.toString());//获取第一行的表头
//                        	}else {
//                        		cellMap.put(colAndNameMap.get(cellNum), cellValue);
//                        	}
//                            
//                        }
//                        //除了第0行都录入
//                        if(rowNum != 0) {
//                        	list.add(cellMap);
//                        }
//                    }
//                }
//            }
//            workbook.close();
//            process.finish();
//            is.close();
//            return list;
//        }
//        
//      
//      
//		@SuppressWarnings("unused")
//		public static void checkFile(String path) throws IOException{
//        	String fileName = path.substring(path.lastIndexOf("/"));//文件名
//        	String fileType = path.substring(path.lastIndexOf("."));//文件类型
//            //判断文件是否存在
//            if(null == path){
//                logger.error("文件不存在！");
//                throw new FileNotFoundException("文件不存在！");
//            }
//            //获得文件名
//            //String fileName = file.getOriginalFilename();
//            //判断文件是否是excel文件
//            /*if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){
//                logger.error(fileName + "不是excel文件");
//                throw new IOException(fileName + "不是excel文件");
//            }*/
//            if(!fileType.equals(xls) && ! fileType.equals(xlsx)) {
//            	 logger.error(fileName + "不是excel文件");
//                 throw new IOException(fileName + "不是excel文件");
//            }
//        }
//        /**
//         * 
//          * 描述： 根据文件后缀，自动适应上传文件的版本.
//          * @author 王求卿[wangqiuqing] Tel18101037995
//          * @param file
//          * @return
//         */
//        public static Workbook getWorkBook(String path) {
//            //获得文件名
//           // String fileName = file.getOriginalFilename();
//            String fileType = path.substring(path.lastIndexOf("."));//文件类型
//            String fileName = path.substring(path.lastIndexOf("/"));//文件名
//            //创建Workbook工作薄对象，表示整个excel
//            Workbook workbook = null;
//            InputStream is = null;
//            try {
//                //获取excel文件的io流
//                //is = file.getInputStream();
//               is =  new FileInputStream(new File(path));
//                //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
//                if(fileType.equals(xls)){
//                    //2003
//                    workbook = new HSSFWorkbook(is);
//                }else if(fileType.equals(xlsx)){
//                    //2007 及2007以上
//                    workbook = new XSSFWorkbook(is);
//                }
//            } catch (IOException e) {
//                logger.info(e.getMessage());
//            }
//            return workbook;
//        }
//        /**
//         * 
//          * 描述： 对表格中数值进行格式化.
//          * @author 王求卿[wangqiuqing] Tel18101037995
//          * @param cell
//          * @return
//         */
//       
//		public static Object getCellValue(Cell cell){
//        	 Object value = null;  
//             DecimalFormat df1 = new DecimalFormat("0");//格式化number，string字符  
//             SimpleDateFormat sdf = new  SimpleDateFormat("yyy-MM-dd");//日期格式化  
//             DecimalFormat df2 = new DecimalFormat("0.00");//格式化数字  
//             if(cell !=null && !"".equals(cell)) {  
//                 switch (cell.getCellType()) {  
//                 case Cell.CELL_TYPE_STRING:  
//                     value = cell.getRichStringCellValue().getString();                    
//                     break;  
//                 case Cell.CELL_TYPE_NUMERIC:  
//                     if("General".equals(cell.getCellStyle().getDataFormatString())) {  
//                         //value = df1.format(cell.getNumericCellValue());  
//                         value = cell.getNumericCellValue();  
//                     }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {  
//                         value = sdf.format(cell.getDateCellValue());  
//                     }else if(HSSFDateUtil.isCellDateFormatted(cell)){  
//                         Date date = cell.getDateCellValue();  
//                         value = sdf.format(date);                 
//                     }else {  
//                    	 // value = df2.format(cell.getNumericCellValue());  
//                         value = cell.getNumericCellValue();  
//                     }                    
//                     break;  
//                 case Cell.CELL_TYPE_BOOLEAN:  
//                     value = cell.getBooleanCellValue();  
//                     break;  
//                 case Cell.CELL_TYPE_BLANK:  
//                     value = "";  
//                     break;  
//                 default:  
//                     break;  
//                 }  
//             }
//             return value;  
//        }
//        
//        public static String getFormat(String str) {  
//        	if(str.equals("null")) {  
//                str="";  
//                return str;  
//            }else{  
//                return str;  
//            }     
//        }  
//        public static Integer getFormats(Integer str) {  
//            if(str==null) {  
//                str=0;  
//                return str;  
//            }else{  
//                return str;  
//            }     
//        }  
//        
//      
//
//    
}